/**
 * @content 地图位置组件
 * @author fjl 2019-7-31 下午2:52:36
 */
import { NativeModules } from 'react-native';
import PointF from './PointF';

let MO = NativeModules.JSMagnifierOption;

/**
 * 放大镜功能组件
 * @class MagnifierOption
 */
export default class MagnifierOption {
  /**
   * 构造一个新的 MagnifierOption 对象。
   * @memberOf MagnifierOption
   * @returns {Promise.<MagnifierOption>}
   */
  async createObj() {
    try {
      if (
        typeof arguments[0] === 'number' &&
        typeof arguments[1] === 'number' &&
        typeof arguments[2] === 'number' &&
        typeof arguments[3] === 'string'
      ) {
        var { MagnifierOptionId } = await MO.createObj(
          arguments[0],
          arguments[1],
          arguments[2],
          arguments[3]
        );
        var magnifierOption = new MagnifierOption();
        magnifierOption._MGMagnifierOptionId = MagnifierOptionId;
        return magnifierOption;
      } else {
        var { MagnifierOptionId } = await MO.createObj();
        var magnifierOption = new MagnifierOption();
        magnifierOption._MGMagnifierOptionId = MagnifierOptionId;
        return magnifierOption;
      }
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取缩放比例
   * @memberOf MagnifierOption
   * @returns {Promise<Number>} 缩放比例
   */
  async getScale() {
    try {
      var { scale } = await MO.getScale(this._MGMagnifierOptionId);
      return scale;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置缩放比例
   * @param scale scale > 1 放大 < 1 缩小
   * @returns {Promise<Object>}
   */
  async setScale(scale) {
    try {
      var { MagnifierOptionId } = await MO.setScale(
        this._MGMagnifierOptionId,
        scale
      );
      var magnifierOption = new MagnifierOption();
      magnifierOption._MGMagnifierOptionId = MagnifierOptionId;

      return magnifierOption;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取放大镜大小
   * @memberOf MagnifierOption
   * @returns {Promise<Number>} 放大镜大小
   */
  async getSize() {
    try {
      let { size } = await MO.getSize(this._MGMagnifierOptionId);
      return size;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置放大镜大小
   * @param size 放大镜大小
   * @returns {Promise<object>}
   */
  async setSize(size) {
    try {
      let { MagnifierOptionId } = await MO.setSize(
        this._MGMagnifierOptionId,
        size
      );
      var magnifierOption = new MagnifierOption();
      magnifierOption._MGMagnifierOptionId = MagnifierOptionId;

      return magnifierOption;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设置放大镜位置调整模式
   * @memberOf MagnifierOption
   * @param mode 放大镜位置调整模式 AUTO_ADJUST_POINT 自动调整 USER_CUSTOM_POINT 自定义位置
   * @returns {Promise<object>}
   */
  async setPointAdjustMode(mode) {
    try {
      let { MagnifierOptionId } = await MO.setPointAdjustMode(
        this._MGMagnifierOptionId,
        mode
      );
      var magnifierOption = new MagnifierOption();
      magnifierOption._MGMagnifierOptionId = MagnifierOptionId;

      return magnifierOption;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取放大镜位置调整模式
   * @memberOf MagnifierOption
   * @returns {Promise<Number>} 放大镜位置调整模式
   */
  async getPointAdjustMode() {
    try {
      let { mode } = await MO.getPointAdjustMode(this._MGMagnifierOptionId);
      return mode;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获取放大镜位置
   * @memberOf MagnifierOption
   * @returns {Promise<object>} 获取放大镜位置
   */
  async getPoint() {
    try {
      var { PointFId } = await MO.getPoint(this._MGMagnifierOptionId);
      var pointF = new PointF();
      pointF._MGPointFId = PointFId;
      return pointF;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 设设置放大镜位置
   * @memberOf MagnifierOption
   * @param pointF 放大镜左上角位置
   * @returns {Promise<object>}
   */
  async setPoint(pointF) {
    try {
      let { MagnifierOptionId } = await MO.setPoint(
        this._MGMagnifierOptionId,
        pointF._MGPointFId
      );
      var magnifierOption = new MagnifierOption();
      magnifierOption._MGMagnifierOptionId = MagnifierOptionId;

      return magnifierOption;
    } catch (e) {
      console.error(e);
    }
  }
}
